﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.Logica.Clases;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaReporte
    {
        /// <summary>
        /// Prueba la funcion de CalcularPromedio de la clase Reporte
        /// </summary>
        [Test]
        public void PruebaCalcularPromedio()
        {
            Reporte pruebaReporte = new Reporte();
            List<decimal> numeros = new List<decimal>();
            decimal promedio = 0;
            decimal retorno = 0;
            numeros.Add(1);
            numeros.Add(2);
            numeros.Add(3);
            numeros.Add(4);
            promedio = 1 + 2 + 3 + 4;
            promedio = promedio / 4;
            retorno = pruebaReporte.CalcularPromedio(numeros);
            Assert.AreEqual(retorno,promedio);
        }

        /// <summary>
        /// Se prueba la funcion de CalculaDefinitivaAlumnos en la clase Reporte
        /// </summary>
        [Test]
        public void PruebaCalcularDefinitivaAlumnos()
        {
            Reporte pruebaReporte = new Reporte();
            List<decimal> numeros = new List<decimal>();
            List<Evaluacion> evaluaciones = new List<Evaluacion>();
            Evaluacion evaluacion1 = new Evaluacion();
            Evaluacion evaluacion2 = new Evaluacion();
            Evaluacion evaluacion3 = new Evaluacion();
            Evaluacion evaluacion4 = new Evaluacion();
            decimal suma = 0;
            decimal retorno = 0;
            int i=0;
            evaluacion1.Porcentaje = 25;
            evaluacion2.Porcentaje = 25;
            evaluacion3.Porcentaje = 25;
            evaluacion4.Porcentaje = 25;
            evaluaciones.Add(evaluacion1);
            evaluaciones.Add(evaluacion2);
            evaluaciones.Add(evaluacion3);
            evaluaciones.Add(evaluacion4);
            while (i<4)
            {
                numeros.Add(i+1);
                suma = suma + (numeros.ElementAt(i) * 25)/100;
                i++;
            }
            retorno = pruebaReporte.CalcularDefinitivaAlumnos(evaluaciones, numeros);
            Assert.AreEqual(retorno, suma);
        }

        /// <summary>
        /// Se prueba la funcion de ConsultarNotasAlumno en la clase Reporte
        /// </summary>
        [Test]
        public void PruebaConsultarNotasAlumno()
        {
            Reporte pruebaReporte = new Reporte();
            List<Evaluacion> evaluaciones = new List<Evaluacion>();
            List<Nota> listanotas1 = new List<Nota>();
            List<Nota> listanotas2 = new List<Nota>();
            Evaluacion evaluacion1 = new Evaluacion();
            Evaluacion evaluacion2 = new Evaluacion();
            Nota nota1 = new Nota();
            Nota nota2 = new Nota();
            List<decimal> notas = new List<decimal>();
            List<decimal> retorno;
            notas.Add(18);
            notas.Add(10);
            nota1.FkIdEstudiante = 1111;
            nota1.NotaObtenida = 18;
            nota2.FkIdEstudiante = 1111;
            nota2.NotaObtenida = 10;
            listanotas1.Add(nota1);
            listanotas2.Add(nota2);
            evaluacion1.NotasEvaluacion = listanotas1;
            evaluacion2.NotasEvaluacion = listanotas2;
            evaluaciones.Add(evaluacion1);
            evaluaciones.Add(evaluacion2);
            retorno = pruebaReporte.ConsultarNotasAlumno(1111, evaluaciones);
            Assert.AreEqual(retorno, notas);
        }

        /// <summary>
        /// Se prueba la funcion de ConsultarMateria en la clase Reporte
        /// y ConsultarMateriaSeccionProferos en la clase SqlServerReporte
        /// </summary>
        [Test]
        public void PruebaConsultarMateria()
        {
            int profesor = 14990555;
            Reporte reporte = new Reporte();
            List<SeccionMateria> secciones = new List<SeccionMateria>();
            secciones = reporte.ConsultarMateria(profesor);
            Assert.IsNotNull(secciones);
            Assert.AreEqual(secciones[0].Profesor.Cedula, profesor);

        }

        /// <summary>
        /// Se prueba la funcion de ConsultarPractica en la clase Reporte
        /// y ConsultarPracticaProfesor en la clase SqlServerReporte
        /// </summary>
        [Test]
        public void PruebaConsultarPractica()
        {
            int profesor = 4097234;
            Reporte reporte = new Reporte();
            List<Practica> secciones = new List<Practica>();
            secciones = reporte.ConsultarPractica(profesor);
            //Assert.IsNotNull(secciones);
            Assert.AreEqual(secciones[0].profesor.Cedula, profesor);
        }

        /// <summary>
        /// Se prueba la funcion de ConsultarNotas en la clase Reporte
        /// y ConsultarNotas en la clase SqlServerReporte
        /// </summary>
        [Test]
        public void PruebaConsultarNotas()
        {
            int seccion = 1;
            Reporte reporte = new Reporte();
            List<Evaluacion> secciones = new List<Evaluacion>();
            secciones = reporte.ConsultarNotas(seccion);
            Assert.IsNotNull(secciones);
            Assert.AreEqual(secciones[0].FkIdSeccion, seccion);
        }

        /// <summary>
        /// Se prueba la funcion de ConsultarEstudiantes en la clase Reporte
        /// y ConsultarEstudiantes en la clase SqlServerReporte
        /// </summary>
        [Test]
        public void PruebaConsultarEstudiantes()
        {
            int seccion = 1;
            Reporte reporte = new Reporte();
            List<Estudiante> estudiantes = new List<Estudiante>();
            estudiantes = reporte.ConsultarEstudiantes(seccion);
            Assert.IsNotNull(estudiantes);
        }
    }
}